package com.freemalll.merchant.feign.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;

import java.io.Serializable;
import java.util.List;

/**
 * @author wubo
 */
@Data
public class OrganizationDto implements Serializable {

    private String id;

    /**
     * 组织名称
     **/
    @NotBlank(message = "组织名称不能为空")
    private String orgName;
    /**
     * 组织编码层级码 比如 001 001001 以便进行数据权限过滤 因为采用了 in 的查询方式 编码允许为空
     **/
    private String orgCode;
    /**
     * 扩展树属性
     **/
    private Boolean treeCheck;

    /**
     * 座机
     **/
    private String tel;
    /**
     * 移动电话
     **/
    private String mobile;
    /**
     * 照片url
     **/
    private String photo;
    /**
     * 商标logourl
     **/
    private String logo;

    /**
     * 联系人
     **/
    private String linkman;

    /**
     * 组织状态 false 停用 true 启用
     **/
    private Boolean orgStatus;

    /**
     * 地区-省
     **/
    private String province;

    /**
     * 地区-市
     **/
    private String city;

    /**
     * 地区-区
     **/
    private String area;

    @Schema(description = "系统唯一编码")
    private String orgOnlyCode;

    @Schema(description = "是否区域管控 0 否 1是")
    private String region;

    /**
     * 组织机构类型Id
     **/
    @NotBlank(message = "组织类型id不能为空")
    private String orgTypeId;

    /**
     * 组织机构类型编码
     **/
    @NotBlank(message = "组织类型编码不能为空")
    private String orgTypeCode;
    /**
     * 父节点id
     **/
    @NotNull(message = "组织父节点不能为空")
    private String parentId;

    private List<OrganizationDto> child;

    /**
     * 获取人员权限时，当前人员在当前组织上面的账户类型
     */
    private AccountTypeCodeEnum accountTypeCode;

    private String address;

    public String getOrgTypeId() {
        return orgTypeId;
    }


    /**
     * 账户类型 admin超级管理员 pub管理员 pri员工
     * @author yy
     */
    @Getter
    @AllArgsConstructor
    public enum AccountTypeCodeEnum{
        /*** 超级管理员 */
        admin("admin", "超级管理员"),
        /** 公共的 */
        pub("pub", "公共"),
        /** 私有的 */
        pri("pri", "私有");

        /**
         * 枚举代码
         */
        private String value;
        /**
         * 枚举描述
         */
        private String desc;

    }
}
